define(['module/ng-datatable/script'  , 'ztree'],function(){
	var controller = function( $scope , $timeout , $ctx , $ajax ){
		pwin.setLabel('角色管理') ;
		$scope.searchForm = {
			fields 	: 	[[{
				label 	: 	'角色名称' ,
				name 	: 	'name' ,
				cols 	: 	4
			},{
				label 	: 	'角色标识' ,
				name 	: 	'code' ,
				cols	: 	4
			}]],
			data 	: 	{}
		}

		$scope.dataTable = {
			setting : {
				aoColumns : 	[{
					mData 	: 	'id' ,
					sTitle 	: 	'ID' ,
					sWidth 	: 	'5%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	true ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'name' ,
					sTitle 	: 	'角色名称' ,
					sWidth 	: 	'8%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'code' ,
					sTitle 	: 	'角色标识' ,
					sWidth 	: 	'5%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'note' ,
					sTitle 	: 	'备注' ,
					sWidth 	: 	'8%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'isSystem' ,
					sTitle 	: 	'系统角色' ,
					sWidth 	: 	'5%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'createTime' ,
					sTitle 	: 	'添加日期' ,
					sWidth 	: 	'5%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'createName' ,
					sTitle 	: 	'创建人' ,
					sWidth 	: 	'8%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return data || '--' ;
					}
				},{
					mData 	: 	'statusName' ,
					sTitle 	: 	'状态' ,
					sWidth 	: 	'8%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	false ,
					render 	: 	function( data , st , row ){
						return typeof data == 'undefined' ? '--' : data ;
					}
				},{
					mData 	: 	'id' ,
					sTitle 	: 	'操作' ,
					sWidth 	: 	'5%' ,
					sClass 	: 	'center nowrap' ,
					bSortable	: 	true ,
					render 	: 	function( data , st , row ){
						var btnGroup = $('<div></div>').addClass('btn-group-inline') ;
						$('<a>修改</a>').attr({
							'class' 	: 	'btn btn-info btn-xs' ,
							'data-id' 	: 	data ,
							'name' : 	'update-btn'
						}).appendTo( btnGroup ) ;

						$('<a>删除</a>').attr({
							'class' 	: 	'btn btn-danger btn-xs' ,
							'data-id' 	: 	data ,
							'name' : 	'delete-btn'
						}).appendTo( btnGroup ) ;

						$('<a>'+(row.status ? '激活' : '禁用')+'</a>').attr({
							'class' 	: 	'btn btn-warning btn-xs' ,
							'data-id' 	: 	data ,
							'name' : 	'status-btn'
						}).appendTo( btnGroup ) ;

						return btnGroup.children().length && btnGroup[0].outerHTML || '暂无操作' ;
					}
				}],
				ajaxSource : $ctx.api + 'role'  ,
			},
			table 	: 	undefined
		}
			
		var searchHandler = {//查询
			init 	: 	function(){
				$('form[name=search-form]').delegate('[name=search-btn]' , 'click' , function(){
					if( $scope.dataTable.table )
						$scope.dataTable.table.draw( true ) ;
				});
				return this;
			}
		}

		$scope.createForm = {
			title 	: 	'添加角色' ,
			fields 	: 	[[{
				label 	: 	'角色名称' ,
				name 	: 	'name' ,
				rule 	: 	{
					required 	: 	true ,
					maxlength 	: 	20 
				},
				help 	: 	'长度不大于20个字符' ,
				/*type 	: 	'select,text,checkbox,radio,textarea,fileInput,imageInput' ,
				//select 配置数据
				option 	: 	{
					url 	: 	'url' ,
					key 	: 	'$id' ,
					name 	:  	'$name[$id]'
				},*/
				cols 	: 	6
			},{
				label 	: 	'角色标识' ,
				name 	: 	'code' ,
				rule 	: 	{
					required 	: 	true ,
					maxlength 	: 	20 
				},
				help 	: 	'长度不大于20个字符' ,
				cols	: 	6
			}],[{
				label 	: 	'描述' ,
				name 	: 	'note' ,
				rule 	: 	{
					required 	: 	false ,
					maxlength 	: 	200 
				},
				help 	: 	'长度不大于200个字符' ,
				cols 	: 	12
			}]],
			data 	: 	{}
		} ;

		var createHandler = {//新增			
			rule 	: 	{
				
			},
			init 	: 	function(){				
				this.modal = $('#create-modal') ;
				this.form = $('#create-form') ;
				var _this = this ;
				$('#create-btn').bind('click' , function(){
					_this.show() ;
				});
				$(this.modal).delegate('[name=positive-btn]' ,'click' , function(){
					_this.submit($scope.createForm.data) ;
				});
				this.validator = $(this.form).validate( this.rule ) ;
				return this ;
			},
			reset 	: 	function(){
				var _this = this ;
				$timeout( function(){
					//重置样式
					$(_this.form).find('.has-error , .has-success').removeClass('has-success').removeClass('has-error') ;
					//重置数据
					$scope.createForm.data = {} ;
				});
			},
			show 	: 	function(){				
				this.reset() ;//重置表单
				$(this.modal).modal('show') ;
			},
			submit 	: 	function( data ){
				var _this = this ;
				if( !this.validator.form() )
					return false ;
				console.log( '添加数据' , data , JSON.stringify( data ) ) ;
				//-------------------------配置新增接口地址--------------------------------
				$ajax.post($ctx.api+'role', JSON.stringify( data ) ).success( function( result ){
					console.log('添加成功' , result ) ;
					if( result.code != 0 )
						return alert( result.message ) ;

					$(_this.modal).modal('hide') ;
					alert('添加成功!' ) ;
					$scope.dataTable.table.draw( true ) ;
				});
			}
		}

		
		$scope.updateForm = {
			title 	: 	'修改角色' ,
			fields 	: 	[[{
				label 	: 	'角色名称' ,
				name 	: 	'name' ,
				rule 	: 	{
					required 	: 	true ,
					maxlength 	: 	20 
				},
				help 	: 	'长度不大于20个字符' ,
				cols 	: 	6
			},{
				label 	: 	'角色标识' ,
				name 	: 	'code' ,
				rule 	: 	{
					required 	: 	true ,
					maxlength 	: 	20 
				},
				help 	: 	'长度不大于20个字符' ,
				cols	: 	6
			}],[{
				label 	: 	'描述' ,
				name 	: 	'note' ,
				rule 	: 	{
					required 	: 	false ,
					maxlength 	: 	200 
				},
				help 	: 	'长度不大于200个字符' ,
				cols 	: 	12
			}]],
			data 	: 	{}
		} ;
		var updateHandler = {//修改
			rule 	: 	{

			},
			init: function() {	
				this.modal = $('#update-modal') ;
				this.form = $('#update-form') ;
				var _this = this ;
				$('#datatable-list').delegate('[name=update-btn]', 'click', function() {			
					_this.show( $(this).attr("data-id") ); 
				});	
				$(this.modal).delegate('[name=positive-btn]' ,'click' , function(){
					_this.submit( $scope.updateForm.data ) ;
				});
				this.validator = $(this.form).validate( this.rule ) ;
				return this
			},
			loadDetail 	: 	function( id , then ){
				//-------------------------配置详情接口地址--------------------------------
				$ajax.get( $ctx.api + 'role/' + id ).success( function( result ){
					if( result.code != 0 )
						return alert( result.message ) ;

					var data = result.data ;
					if( !data )
						return alert('数据不存在!' ) ; 

					$timeout( function(){
						$scope.updateForm.data = data;
					});
					then( result.data ) ;
				});
			},
			reset 	: 	function(){
				var _this = this ;
				$timeout( function(){
					//重置样式
					$(_this.form).find('.has-error , .has-success').removeClass('has-success').removeClass('has-error') ;
					//重置数据
					$scope.updateForm.data = {} ;
				});
			},
			show 		: 	function( id ){
				if( typeof id == 'undefined' )
					return alert('请选择一条数据!') ;
				this.id = id ;

				this.reset() ;//重置表单

				var _this = this ;
				this.loadDetail( this.id , function( ){
					$(_this.modal).modal('show') ;
				});
			},
			submit 	: 	function( data ){
				if( !this.validator.form() )
					return false ;

				var _this = this , param = util.editableData( $scope.updateForm.fields , data ) ;

				//-------------------------配置修改接口地址--------------------------------
				$ajax.put( $ctx.api+'role/' + this.id ,JSON.stringify( param ) ).success( function( result ){
					if( result.code != 0 )
						return alert( result.message ) ;

					$(_this.modal).modal('hide') ;
					alert('更新成功!' ) ;
					$scope.dataTable.table.draw( false ) ;
				});
			}
		}

		var deleteHandler = {
			init 	: 	function(){
				var _this = this ;
				$('#datatable-list').delegate('[name=delete-btn]', 'click', function() {	
					var _ele = this ;		
					confirm('是否删除?' , function(){
						_this.del( $(_ele).attr("data-id") ) ;
					});
				});
				return this ;
			},
			del 	: 	function( id ){
				//-------------------------配置删除接口地址--------------------------------
				$ajax.remove( $ctx.api + 'role/' + id ).success( function( result ){
					if( result.code != 0 )
						return alert( result.message ) ;
					alert('删除成功!') ;
					$scope.dataTable.table.draw( false ) ;
				});
			}
		}

		var statusHandler = {
			init 	: 	function(){
				var _this = this ;
				$('#datatable-list').delegate('[name=status-btn]', 'click', function() {	
					var _ele = this ;		
					_this.updateStatus( $(_ele).attr("data-id") ) ;
				});
				return this ;
			},
			updateStatus 	: 	function( id ){
				//-------------------------配置禁用/激活接口地址--------------------------------
				$ajax.put( $ctx.api + 'role/' + id +'/status' ).success( function( result ){
					if( result.code != 0 )
						return alert( result.message ) ;
					alert('操作成功!') ;
					$scope.dataTable.table.draw( false ) ;
				});
			}
		}
		
		//页面初始化入口
		$timeout( function(){
			searchHandler.init() ;
			createHandler.init() ;
			updateHandler.init() ;
			deleteHandler.init() ;
			statusHandler.init() ;
		});
	}
	return controller ;
});